﻿#include "semaphore.h"

semaphore::semaphore(int avai):
	available(avai){
}

semaphore::semaphore() :
	semaphore(1) {
}

void semaphore::down() {
	unique_lock<mutex> lck(m);
	available--;
	if (available < 0)
		cond.wait(lck);
}

void semaphore::up() {
	unique_lock<mutex> lck(m);
	available++;
	// 唤醒队列头
	if (available <= 0)
		cond.notify_one();
}